package com.example.bigdata.scala.列表

object ListDemo {
  def main(args: Array[String]): Unit = {

    //字符串类型 list 方法 1
    val listStr = List("Spark","Hive","Flink")
    println("listStr.iterator : " + listStr.iterator)
    val result1 = "1" match {
      case "1" => ("one")
      case "2" => "two"
      case _ => "other"
    }
    println("result1 : " + result1)

    //字符串类型 list 方法 2
    var listStr1 = List.apply("Spark","Hive","Flink")

    //数值类型List
    val doubleList = List(1.0,2.0,3.0)
    val evens = doubleList.filter(_ %2 == 0)
    println("evens "+evens)
    val s1 = listStr.filter(_.endsWith("k"))
    println("s1 : " + s1)

    //多重list ， list 的子元素为list
    val multiDList = List(List(1,2,3),List(2,3,4),List(4,5,6),List(7,8,9,10))

    // 遍历 list
    for(i<- multiDList){
      println(i)
    }

    //采用 :: 及 Nil 进行列表构建
    val nums = 1::(2::(3::(4::Nil)))
    val nums1 = 1::2::3::4::Nil
    println("nums : " + nums + "\nnums1 : " + nums1)


    // 判断是否为空
    println("判断是否为空 nums.isEmpty : " + nums.isEmpty)

    // 取第一个元素
    println("取第一个元素 nums.head : " + nums.head)

    //获取第一个元素外剩余的元素，返回的是列表
    println("获取第一个元素外剩余的元素，返回的是列表 nums.tail : " + nums.tail)

    //获取列表第二个元素

    println("获取列表第二个元素 : " + nums.tail.head)

    //List 连接操作

    println(List(1,2,3) :::List(4,5,6))

    //去除最后一个元素
    println("去除最后一个元素 nums.init : " + nums.init)

    //获取最后一个元素

    println("获取最后一个元素 nums.last : " + nums.last)

    // 列表元素倒置
    println("列表元素倒置 nums.reverse : " + nums.reverse)

    //丢弃前 n 个元素
    println("丢弃前 2 个元素 nums.drop(2) :" + nums.drop(2))

    //获取前 n 个元素
    println( "获取前 n 个元素 nums.take(2) :" + nums.take(2))

    // 将列表进行分割
    println("将列表进行分割  nums.splitAt(2) : " + nums.splitAt(2))

    // 上面操作与下面语句相同

    println("上面操作与下面语句相同 (nums.take(2),nums.drop(2)) : " + (nums.take(2),nums.drop(2)))

    //zip 操作
    val chars = List('3','4','5','6')

    //返回 list 类型的元组

    val x = nums zip chars
    val x1 = nums zip(chars)
    println( " x : " + x +"\nx1 : " + x1)

    //List toString 方法
    println("toString : "+ nums.toString())

    // List mkString 方法
    println("mkString : " + nums.mkString)

    //转换成数组
    println("转换成数组 : " + nums.toArray)

    //apply 方法
    List.apply(1,2,3,4)

    //range 方法 构建范围 list
    println("range 方法 " + List.range(1,6))


    //步长2
    println("步长2 " + List.range(1,6,2))

    //步长 -1
    println("步长 -1 " + List.range(12,6,-1))


    // 构建相同元素的List
    println("构建相同元素的List : " + List.fill(3)("hi"))


    //list.flatten,将列表平滑成一个元素

    val xss = List(List('a','b'),List('c'),List("d","e"))
    println("list.flatten,将列表平滑成一个元素 : " + xss.flatten)

    // 列表连接
    println("列表连接 : " + List.concat(List('a','v'),List('c')))


  }
}
